﻿// 文件名：函数重载示例
// 创建时间：2021/6/28/星期一 17:08:40

#include <iostream>
using namespace std;

unsigned long left(unsigned long num, unsigned ct);
char * left(const char * str ,int n = 1);


int main()
{
	const char * trip = "HUAWEI!!";
	unsigned long n = 12345678;
	int i = 0;
	char * temp;
	for (i = 1; i < 10; i++)
	{
		cout << left(n, i) << endl;
		temp = left(trip, i);
		cout << temp << endl;
		delete[] temp; //temp是指针，在堆区，需要手动清理
	}




	system("pause");
	return 0;
}


//返回整形数据的前几位
unsigned long left(unsigned long num, unsigned ct)
{
	unsigned digits = 1;
	unsigned long n = num; //赋值一份
	if (ct == 0 || num == 0)
	{
		return 0;
	}
	while (n /= 10)//判断整数有几位
	{
		digits++;
	}
	if (digits > ct)//要求显示的位数要小于总的位数
	{
		ct = digits - ct;
		while (ct--)//获取需要的前几位数字
		{
			num /= 10;
		}
		return num;
	}
	else //要求显示的位数大于总长度，直接输出原始数据
	{
		return num;
	}
}

char * left(const char * str, int n)
{
	if (n < 0)
	{
		n = 0;
	}
	char* p = new char[n + 1];
	int i = 0;
	for (i = 0; i < n && str[i]; i++)
	{
		p[i] = str[i];
	}
	while (i <= n)
	{
		p[i++] = '\0';//将其余位置的字符设为空字符
	}
	return p;
}